package client.meteoUtils;



import java.util.Date;
import java.util.Vector;

import com.google.gwt.xml.client.Element;
import com.google.gwt.xml.client.Node;
import com.google.gwt.xml.client.NodeList;

public class Meteo 
{	
	private Vector 	paramMeteo 		; 
	private Vector  bulletinMeteo 	; 
	private Vector 	indicesMeteo	;
	
	
	public Meteo(Element noeudRacine) 
	{
		paramMeteo 		= new Vector();
		bulletinMeteo 	= new Vector();
		indicesMeteo	= new Vector();
		
		
		Node node_params 	= noeudRacine.getElementsByTagName("PARAMETRES").item(0) ; 
		Node node_indices 	= noeudRacine.getElementsByTagName("INDICES").item(0) ; 
		Node node_bulletins = noeudRacine.getElementsByTagName("BULLETINS").item(0) ; 
		
		creerParametres( (Element)node_params);
		creerIndices( (Element)node_indices );
		creerBulletins( (Element)node_bulletins );
	}
	
	
	private Date dateParser(String s)
	{
		Date d = null ;
		String[] parts = s.split("/");
		if( parts[2].indexOf(':') != -1 )
		{
			String annee = parts[2].substring(0, parts[2].indexOf(' '));
			String heure = parts[2].substring(parts[2].indexOf(' ')+1, parts[2].indexOf(':'));
			String minute = parts[2].substring(parts[2].indexOf(':')+1, parts[2].length());
			d = new Date( Integer.parseInt(annee) , Integer.parseInt(parts[1]) ,Integer.parseInt(annee) , Integer.parseInt(heure) , Integer.parseInt(minute) );
		}
		else d = new Date( Integer.parseInt(parts[2]) , Integer.parseInt(parts[1]) , Integer.parseInt(parts[0]) );
		return d;
	}
	
	private void creerParametres(Element noeudRacine)
	{
		String datevaldeb	= noeudRacine.getAttribute("datevaldeb");
		String datevalfin	= noeudRacine.getAttribute("datevalfin");
		String datemaj		= noeudRacine.getAttribute("datemaj");
		
		NodeList listeDeZone= noeudRacine.getElementsByTagName("ZONE") ;
		for(int i = 0 ; i< listeDeZone.getLength() ; i++)
		{
			ParametreMeteo pm = new ParametreMeteo();
			
			Element e = (Element)listeDeZone.item(i); String val ="";
			
			pm.setDatemaj(dateParser(datemaj));
			pm.setDatevaldeb(dateParser(datevaldeb));
			pm.setDatevalfin(dateParser(datevalfin));
			
			val = e.getAttribute("nom");pm.setZone(val);
			val = e.getAttribute("altitude");pm.setAltitude(Integer.parseInt(val));
			
			val = e.getElementsByTagName("VALRISQUE").item(0).getFirstChild().getNodeValue();
			val = val+ " : " + e.getElementsByTagName("LIBRISQUE").item(0).getFirstChild().getNodeValue();
			pm.setRisqueAvalanche(val);
			
			val = e.getElementsByTagName("TEMPERATURE").item(0).getFirstChild().getNodeValue();
			pm.setTemperature( val );
			
			val = e.getElementsByTagName("NEIGE").item(0).getFirstChild().getNodeValue();
			pm.setHauteurNeigeFraiche( Integer.parseInt(val) );
			
			val = e.getElementsByTagName("CUMUL").item(0).getFirstChild().getNodeValue();
			pm.setHauteurNeigeFraiche( Integer.parseInt(val) );		
			
			val = e.getElementsByTagName("VENT").item(0).getFirstChild().getNodeValue();
			pm.setForceDuVent( Integer.parseInt(val) );	
			
			val = e.getElementsByTagName("QUALITE").item(0).getFirstChild().getNodeValue();
			pm.setQualiteNeige(  val  );	
			
			val = e.getElementsByTagName("VISIBILITE").item(0).getFirstChild().getNodeValue();
			pm.setVisibilite(  Integer.parseInt(val)   );
			
			val = e.getElementsByTagName("CIEL").item(0).getFirstChild().getNodeValue();
			pm.setEtatCiel( val );
			
			val = e.getElementsByTagName("DERNIERE_CHUTE").item(0).getFirstChild().getNodeValue();
			pm.setDerniereChuteNeige( dateParser(val) );
			
			this.paramMeteo.add(pm);
			/*
			Label l = new Label();l.setText("QUALITE -> "+val);
			MeteoPanel.getInstance().add(l);
			*/
		}
	}
	
	private void creerIndices(Element noeudRacine)
	{
		String val = "" ;
		Element e = null ;
		IndicesMeteo indiceMeteo = new IndicesMeteo();
		
		// NodeList liste =  noeudRacine.getChildNodes() ;
		 
		e = (Element) noeudRacine.getElementsByTagName("SKIABILITE").item(0);
		val = e.getAttribute("val");
		indiceMeteo.setSkiabilite_val( Integer.parseInt(val));
		val = e.getAttribute("lib");
		indiceMeteo.setSkiabilite_lib(val);

		e = (Element) noeudRacine.getElementsByTagName("AMBIANCE").item(0);
		val = e.getAttribute("val");indiceMeteo.setAmbiance_val( Integer.parseInt(val));
		val = e.getAttribute("lib");indiceMeteo.setAmbiance_lib(val);
		
		e = (Element) noeudRacine.getElementsByTagName("RETOUR_SKI").item(0);
		val = e.getAttribute("val");indiceMeteo.setRetour_ski_val(Integer.parseInt(val));
		val = e.getAttribute("lib");indiceMeteo.setRetour_ski_lib(val);
		
		e = (Element) noeudRacine.getElementsByTagName("ETAT_ROUTE").item(0);
		val = e.getAttribute("val");indiceMeteo.setEtat_route_val(Integer.parseInt(val));
		val = e.getAttribute("lib");indiceMeteo.setEtat_route_lib(val);
		
		e = (Element) noeudRacine.getElementsByTagName("PISTES_VERTES").item(0);
		val = e.getAttribute("total");indiceMeteo.setPistes_vertes_total(Integer.parseInt(val));
		val = e.getAttribute("ouvertes");indiceMeteo.setPistes_vertes_ouvertes(Integer.parseInt(val));
		 
		e = (Element) noeudRacine.getElementsByTagName("PISTES_BLEUES").item(0);
		val = e.getAttribute("total");indiceMeteo.setPistes_bleues_total(Integer.parseInt(val));
		val = e.getAttribute("ouvertes");indiceMeteo.setPistes_bleues_ouvertes(Integer.parseInt(val));
		
		e = (Element) noeudRacine.getElementsByTagName("PISTES_ROUGES").item(0);
		val = e.getAttribute("total");indiceMeteo.setPistes_rouges_total(Integer.parseInt(val));
		val = e.getAttribute("ouvertes");indiceMeteo.setPistes_rouges_ouvertes(Integer.parseInt(val));
		
		e = (Element) noeudRacine.getElementsByTagName("PISTES_NOIRES").item(0);
		val = e.getAttribute("total");indiceMeteo.setPistes_noires_total(Integer.parseInt(val));
		val = e.getAttribute("ouvertes");indiceMeteo.setPistes_noires_ouvertes(Integer.parseInt(val));
		
		
		e = (Element) noeudRacine.getElementsByTagName("REMONTEES").item(0);
		val = e.getAttribute("total");indiceMeteo.setRemontes_total(Integer.parseInt(val));
		val = e.getAttribute("ouvertes");indiceMeteo.setRemontes_ouvertes(Integer.parseInt(val));
		
		e = (Element) noeudRacine.getElementsByTagName("KM_SKI_NORDIQUE").item(0);
		val = e.getAttribute("ouvert");indiceMeteo.setKm_ski_nordique(Integer.parseInt(val));	
		
		
		this.indicesMeteo.add(indiceMeteo);
	}
	
	private void creerBulletins(Element noeudRacine)
	{
		NodeList listeDeBulletin= noeudRacine.getElementsByTagName("BULLETIN") ;
		for(int i = 0 ; i< listeDeBulletin.getLength() ; i++)
		{
			Element element_bulletin = (Element)listeDeBulletin.item(i);
			
			String dvd = element_bulletin.getAttribute("datevaldeb");
			String dvf = element_bulletin.getAttribute("datevalfin");
			
			// liste des langues dispos pour le bulletin
			NodeList langues= element_bulletin.getElementsByTagName("LANGUE") ;
			for(int l = 0 ; l< langues.getLength() ; l++)
			{				
				Element element_langue = (Element)langues.item(l);
				
				BulletinMeteo bull = new BulletinMeteo();
				bull.setDatevaldeb(dateParser(dvd));
				bull.setDatevalfin(dateParser(dvf));
				
				String lg = element_langue.getAttribute("val");
				bull.setLangue(lg);
				
				String contenu = "";
				// liste le bulletin
				NodeList lignes = element_langue.getElementsByTagName("LIGNE") ;
				for(int k = 0 ; k< lignes.getLength() ; k++)
				{			
					if(lignes.item(k).hasChildNodes())
					{
						contenu = contenu + lignes.item(k).getFirstChild().getNodeValue() + "\n" ;
					}					
				}
				
				bull.setBulletin(contenu);
				
				this.bulletinMeteo.add(bull);
			}
			
			
		}
	}

	
	
	public Vector getBulletinMeteo() {
		return bulletinMeteo;
	}

	public Vector getIndicesMeteo() {
		return indicesMeteo;
	}

	public Vector getParamMeteo() {
		return paramMeteo;
	}
	
}
